/*
 * Created on 2006-6-27
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.powerunion.datacollection.report.excelreport;

import com.powerunion.datacollection.report.excelreport.datasource.IDataSource;


/**
 * 数据源查询事件监听器，如果你需要监听一个数据源的查询数据操作的话可以实现该接口，
 * 使用该接口你可以手动控制数据源的检索过程。
 * 该接口主要在主从报表中使用，因为在从报表中从报表的数据是根据主数据源中传入的参数来获得数据。
 * <pre>
 * 	//使用范例：
 * 	public boolean execute(
 *		ReportConfig reportConfig, //报表配置参数对象
 *		Map dataSources, 		   //报表数据源
 *		Map params				   //传入参数。
 * 	)throws Exception{ 
 * 		...
 * 		BaseDataSource ds = (BaseDataSource)dataSources.get("groupDs");
 * 		...
 * 		if(null != ds){
 * 			ds.setQueryDataListener(new IQueryDataListener(){
 *				public boolean beforeQuery(IDataSource dataSource) {
 *					BaseDataSource baseDataSource = (BaseDataSource)dataSource;
 *					
 *					//Here you can do something you want to prepare query data.
 *					return false;//To skip the original query function.
 *				}
 *
 *				public void afterQuery(IDataSource dataSource){
 *					BaseDataSource baseDataSource = (BaseDataSource)dataSource;
 *					baseDataSource.moveToFirst();
 *					//Here you can do anything you want after query data.
 *				}
 *			});
 *		}
 * 		...
 * 	}
 * </pre>
 * @author juny
 */
public interface IQueryDataListener {
    /**
     * 当前数据源对象需要检索数据时beforeQuery事件被触发，<br>
     * 注意：当该函数返回ture时系统不会调用默认的检索函数，比如一个数据库类型的数据源，
     * 可以通过该函数的返回值来控制数据源是否在该函数返回后还去数据库中检索数据。
     * @param ds	当前数据源对象
     * @return		true：跳过默认的数据源检索， false，启用数据默认检索。
     */
    boolean beforeQuery(IDataSource ds);
    
    /**
     * 查询后处理事件，当一个数据源检索完数据后触发该事件。
     * @param ds	当前数据源对象
     */
    void afterQuery(IDataSource ds);
}
